define(["jquery", "easy-admin"], function ($, ea) {
    var $=layui.jquery,
        table=layui.table,
        layer=layui.layer,
        form=layui.form;
    var admin = {
        headers: function () {
            return {'X-CSRF-TOKEN': window.CONFIG.CSRF_TOKEN};
        }
    }

    var Controller = {

        database:function () {
            $(function () {
                gouguInit();
            })
            function gouguInit() {
                var tableIns = table.render({
                    elem: '#backup',
                    title: '数据备份',
                    toolbar: '#toolbarDemo',
                    url: ea.url('system.Database/database'), //数据接口
                    page: false,
                    cols: [
                        [ //表头
                            { type: 'checkbox' },
                            {
                                field: 'name',
                                title: '数据表',
                                width: 200
                            },
                            {
                                field: 'status',
                                title: '状态',
                                width: 100,
                                templet: function (d) {
                                    return '<span id="table_' + d.name + '">-</span>';
                                }
                            },
                            {
                                field: 'engine',
                                title: '存储引擎',
                                align: 'center',
                                width: 80
                            }, {
                            field: 'row_format',
                            title: '行格式',
                            align: 'center',
                            width: 80
                        }, {
                            field: 'rows',
                            title: '行数',
                            align: 'center',
                            width: 60,
                        }, {
                            field: 'data_size',
                            title: '字节数',
                            align: 'center',
                            width: 80
                        }, {
                            field: 'data_length',
                            title: '数据大小',
                            align: 'center',
                            width: 80
                        }, {
                            field: 'comment',
                            title: '数据表注释'
                        }, {
                            field: 'create_time',
                            title: '创建时间',
                            width: 160,
                            align: 'center'
                        }
                        ]
                    ],
                    done: function (res, curr, count) {
                        $('#dataTips').html(res.msg);
                    }
                });

                //递归备份表
                function backup(tab, status, table) {
                    layer.closeAll();
                    layer.msg("备份中...，请勿关闭本页面", { time: 200000 });
                    $.get(ea.url('system.Database/backup'), tab, function (data) {
                        if (data.code == 0) {
                            showmsg(data.data.tab.table, data.msg);
                            if (data.data.tab.start == 'ok') {
                                layer.msg('备份完成');
                                window.onbeforeunload = function () { return null }
                                return;
                            }
                            backup(data.data.tab, tab.id != data.data.tab.id);
                        } else {
                            layer.msg('立即备份');
                        }
                    }, "json");
                }

                //修改备份状态
                function showmsg(table, msg) {
                    console.log(table);
                    $("#table_" + table).addClass('span-color-2').html(msg);
                }
                //监听行工具事件
                table.on('toolbar(backup)', function (obj) {
                    var checkData = table.checkStatus(obj.config.id).data;
                    var len = checkData.length;
                    var tables = [];
                    if (len == 0) {
                        layer.msg('请先选择表');
                        return false;
                    }
                    for (var i = 0; i < len; i++) {
                        tables.push(checkData[i].name);
                    }
                    if (obj.event === 'backup') {
                        layer.confirm('确认要备份选中的' + len + '个数据表吗?', {
                            icon: 3,
                            title: '提示'
                        }, function (index) {
                            $.ajax({
                                url: ea.url('system.Database/backup'),
                                type: 'post',
                                data: { 'tables': tables },
                                headers:admin.headers(),
                                success: function (res) {
                                    if (res.code == 0) {
                                        layer.msg("开始备份，请不要关闭本页面！");
                                        window.onbeforeunload = function () { return "正在备份数据库，请不要关闭！" }
                                        backup(res.data.tab);
                                    }
                                    if (res.code == 2) {
                                        layer.confirm('检测到有一个备份任务未完成，请先清除未完成的备份', {
                                            icon: 3,
                                            title: '提示'
                                        }, function (index) {
                                            $.ajax({
                                                url: ea.url('system.Database/del'),
                                                data: { 'lock': 1 },
                                                success: function (res) {
                                                    layer.msg(res.msg);
                                                }
                                            })
                                        })
                                    }
                                    else {
                                        layer.msg(res.msg);
                                    }
                                },
                                error:function (res){
                                    console.log(res);
                                }
                            })
                            layer.close(index);
                        });
                    } else if (obj.event === 'optimize') {
                        layer.confirm('确认要优化选中的' + len + '个数据表吗?', {
                            icon: 3,
                            title: '提示'
                        }, function (index) {
                            $.ajax({
                                url: ea.url('system.Database/optimize'),
                                type: 'post',
                                data: { 'tables': tables },
                                success: function (res) {
                                    layer.msg(res.msg);
                                    if (res.code == 0) {
                                        setTimeout(function () {
                                            location.reload();
                                        }, 2000)
                                    }
                                }
                            })
                            layer.close(index);
                        });
                    } else if (obj.event === 'repair') {
                        layer.confirm('确认要修复选中的' + len + '个数据表吗?', {
                            icon: 3,
                            title: '提示'
                        }, function (index) {
                            $.ajax({
                                url: ea.url('system.Database/repair'),
                                type: 'post',
                                data: { 'tables': tables },
                                success: function (res) {
                                    layer.msg(res.msg);
                                    if (res.code == 0) {
                                        setTimeout(function () {
                                            location.reload();
                                        }, 2000)
                                    }
                                }
                            })
                            layer.close(index);
                        });
                    }
                });
            }
            ea.listen();
        },
        backuplist:function () {
            $(function () {
                gouguInit();
            })
            function gouguInit() {
                function importData(data) {
                    if (data.code == 0) {
                        console.log(data.msg);
                        layer.closeAll();
                        layer.msg(data.msg, { time: 200000 });
                        if ($.isPlainObject(data.data)) {
                            $.ajax({
                                url: ea.url('system.Database/import'),
                                type: 'get',
                                data: { "part": data.data.part, "start": data.data.start, time: data.data.time },
                                success: function (res) {
                                    console.log(res);
                                    importData(res);
                                }
                            })
                        } else {
                            layer.msg(data.msg);
                            window.onbeforeunload = function () { return null; }
                        }
                    } else {
                        layer.msg(data.msg);
                    }
                }
                //监听行工具事件
                $('[lay-event="import"]').on('click', function () {
                    var time = $(this).parent().data('time');
                    layer.confirm('确认要还原该备份吗?', {
                        icon: 3,
                        title: '提示'
                    }, function (index) {
                        layer.msg("数据还原中...", { time: 200000 });
                        $.ajax({
                            url: ea.url('system.Database/import?time=' + time),
                            type: 'post',
                            success: function (res) {
                                importData(res);
                            }
                        })
                        window.onbeforeunload = function () { return "正在还原数据库，请不要关闭！" }
                        layer.close(index);
                    });
                    return false;
                })

                $('[lay-event="del"]').on('click', function () {
                    var time = $(this).parent().data('time');
                    layer.confirm('确认要删除该备份吗?', {
                        icon: 3,
                        title: '提示'
                    }, function (index) {
                        $.ajax({
                            url: ea.url('system.Database/del'),
                            data: { 'time': time },
                            success: function (res) {
                                layer.msg(res.msg);
                                if (res.code == 0) {
                                    setTimeout(function () {
                                        location.reload();
                                    }, 2000)
                                }
                            }
                        })
                        layer.close(index);
                    });
                    return false;
                })

                $('[lay-event="reset"]').on('click', function () {
                    var time = $(this).parent().data('time');
                    layer.confirm('确认要清除该备份吗?', {
                        icon: 3,
                        title: '提示'
                    }, function (index) {
                        $.ajax({
                            url: ea.url('system.Database/del'),
                            data: { 'time': time, 'lock': 1 },
                            success: function (res) {
                                layer.msg(res.msg);
                                if (res.code == 0) {
                                    setTimeout(function () {
                                        location.reload();
                                    }, 2000)
                                }
                            }
                        })
                        layer.close(index);
                    });
                    return false;
                })
            }
            ea.listen();
        }

    };
    return Controller;




})